﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PHI2
{
    /// <summary>
    /// Clase para manejar la captura y registro de mediciones móviles
    /// </summary>
    class ManejoMOVIL
    {
        private string server="pop.gmail.com";
        private int port=995;
        private string user="lab.sap.uch";
        private string contrasena = "labsapuch";
        ConsultasBD consultas = null;

        public ManejoMOVIL(ConsultasBD consultas)
        {
            this.consultas = consultas;
        }

        /// <summary>
        /// Ordena la conexión al servidor de correo electrónico Pop3
        /// </summary>
        /// <returns>Verdadero si fue posible conectarse al servidor</returns>
        public bool ConectarAServidor()
        {
            return AccesoMail.Conectar(server, port, user, contrasena);
        }

        /// <summary>
        /// Retorna la cantidad de correo electrónicos no ingresados al sistema
        /// </summary>
        /// <returns></returns>
        public int CantidadPendientes()
        {
            return AccesoMail.cliente.GetMessageCount();
        }

        /// <summary>
        /// Carga en la base de datos los registros leídos
        /// </summary>
        /// <returns>mensaje con el resultado de la operación de ingreso</returns>
        public string CargarMedicionesMoviles()
        {
            AccesoMail.ListaMensajes = AccesoMail.BajarMensajes();

            string mensaje = "";

            string mensajeCompleto=null;
            int inserciones = 0;
            int actualizaciones = 0;
            string mensajeAdicional="";
            foreach (OpenPop.Mime.Message email in AccesoMail.ListaMensajes)
            {
                mensajeCompleto = email.FindFirstPlainTextVersion().GetBodyAsText();
                List<string> lineas = UtilidadesString.separaLineas(mensajeCompleto);

                foreach (string linea in lineas)
                {
                    string linea2 = linea;
                    linea2 = linea.Replace('.', ',');
                    string[] datamed = linea2.Split(';');
                    int CodigoLab = Int32.Parse(datamed[0]);
                    int idVariedad = consultas.ObtenerIdVariedad(CodigoLab);

                    if (idVariedad > -1)
                    {
                        int repeticion = Int32.Parse(datamed[1]);

                        int ensayo = Int32.Parse(datamed[2]);

                        bool esUpdate = consultas.EsUpdate(idVariedad, ensayo, repeticion);

                        if (!esUpdate)
                        {
                            consultas.AddMedicion(idVariedad, repeticion, ensayo, DateTime.Parse(datamed[3]), DateTime.Parse(datamed[4]), 
                                DateTime.Parse(datamed[5]), DateTime.Parse(datamed[6]), DateTime.Parse(datamed[7]), 
                                float.Parse(datamed[8]), float.Parse(datamed[9]), float.Parse(datamed[10]), 
                                float.Parse(datamed[11]), float.Parse(datamed[12]), float.Parse(datamed[13]), 
                                float.Parse(datamed[14]), float.Parse(datamed[15]), float.Parse(datamed[16]), 
                                float.Parse(datamed[17]), float.Parse(datamed[18]), float.Parse(datamed[19]), 
                                float.Parse(datamed[20]), float.Parse(datamed[21]), float.Parse(datamed[22]), 
                                float.Parse(datamed[23]), float.Parse(datamed[24]), float.Parse(datamed[25]), 
                                float.Parse(datamed[26]), float.Parse(datamed[27]), float.Parse(datamed[28]), 
                                float.Parse(datamed[29]));
                            inserciones++;
                        }
                        else
                        {
                            consultas.UpdateMedicion(idVariedad, repeticion, ensayo, DateTime.Parse(datamed[3]), DateTime.Parse(datamed[4]), 
                                DateTime.Parse(datamed[5]), DateTime.Parse(datamed[6]), DateTime.Parse(datamed[7]), 
                                float.Parse(datamed[8]), float.Parse(datamed[9]), float.Parse(datamed[10]), 
                                float.Parse(datamed[11]), float.Parse(datamed[12]), float.Parse(datamed[13]), 
                                float.Parse(datamed[14]), float.Parse(datamed[15]), float.Parse(datamed[16]), 
                                float.Parse(datamed[17]), float.Parse(datamed[18]), float.Parse(datamed[19]), 
                                float.Parse(datamed[20]), float.Parse(datamed[21]), float.Parse(datamed[22]), 
                                float.Parse(datamed[23]), float.Parse(datamed[24]), float.Parse(datamed[25]), 
                                float.Parse(datamed[26]), float.Parse(datamed[27]), float.Parse(datamed[28]), 
                                float.Parse(datamed[29]));
                            actualizaciones++;
                        }
                    }
                    else
                    {
                        mensajeAdicional = "Sin embargo, el archivo contenía variedades no registradas. Estas no fueron ingresadas";
                    }


                }
            }
            mensaje="Se han ingresado " + inserciones.ToString() + " nuevos registros. \nSe han ingresado " + actualizaciones.ToString() + " actualizaciones." + mensajeAdicional;
            return mensaje;
        
        }

    }
}
